<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- 
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements.  See the NOTICE file
distributed with this work for additional information
regarding copyright ownership.  The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License.  You may obtain a copy of the License at

 http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied.  See the License for the
specific language governing permissions and limitations
under the License. 
-->
<html>
<head>
    <link type="text/css" rel="stylesheet" href="https://struts.apache.org/css/default.css">
    <style type="text/css">
        .dp-highlighter {
            width:95% !important;
        }
    </style>
    <style type="text/css">
        .footer {
            background-image:      url('https://cwiki.apache.org/confluence/images/border/border_bottom.gif');
            background-repeat:     repeat-x;
            background-position:   left top;
            padding-top:           4px;
            color:                 #666;
        }
    </style>
    <link href='https://struts.apache.org/highlighter/style/shCoreStruts.css' rel='stylesheet' type='text/css' />
    <link href='https://struts.apache.org/highlighter/style/shThemeStruts.css' rel='stylesheet' type='text/css' />
    <script src='https://struts.apache.org/highlighter/js/shCore.js' type='text/javascript'></script>
    <script src='https://struts.apache.org/highlighter/js/shBrushPlain.js' type='text/javascript'></script>
    <script src='https://struts.apache.org/highlighter/js/shBrushXml.js' type='text/javascript'></script>
    <script src='https://struts.apache.org/highlighter/js/shBrushJava.js' type='text/javascript'></script>
    <script src='https://struts.apache.org/highlighter/js/shBrushJScript.js' type='text/javascript'></script>
    <script src='https://struts.apache.org/highlighter/js/shBrushGroovy.js' type='text/javascript'></script>
    <script src='https://struts.apache.org/highlighter/js/shBrushBash.js' type='text/javascript'></script>
    <script type="text/javascript">
        SyntaxHighlighter.defaults['toolbar'] = false;
        SyntaxHighlighter.all();
    </script>
    <script type="text/javascript" language="javascript">
        var hide = null;
        var show = null;
        var children = null;

        function init() {
            /* Search form initialization */
            var form = document.forms['search'];
            if (form != null) {
                form.elements['domains'].value = location.hostname;
                form.elements['sitesearch'].value = location.hostname;
            }

            /* Children initialization */
            hide = document.getElementById('hide');
            show = document.getElementById('show');
            children = document.all != null ?
                    document.all['children'] :
                    document.getElementById('children');
            if (children != null) {
                children.style.display = 'none';
                show.style.display = 'inline';
                hide.style.display = 'none';
            }
        }

        function showChildren() {
            children.style.display = 'block';
            show.style.display = 'none';
            hide.style.display = 'inline';
        }

        function hideChildren() {
            children.style.display = 'none';
            show.style.display = 'inline';
            hide.style.display = 'none';
        }
    </script>
    <title>Key Changes From WebWork 2</title>
</head>
<body onload="init()">
<table border="0" cellpadding="2" cellspacing="0" width="100%">
    <tr class="topBar">
        <td align="left" valign="middle" class="topBarDiv" align="left" nowrap>
            &nbsp;<a href="home.html">Home</a>&nbsp;&gt;&nbsp;<a href="guides.html">Guides</a>&nbsp;&gt;&nbsp;<a href="migration-guide.html">Migration Guide</a>&nbsp;&gt;&nbsp;<a href="key-changes-from-webwork-2.html">Key Changes From WebWork 2</a>
        </td>
        <td align="right" valign="middle" nowrap>
            <form name="search" action="https://www.google.com/search" method="get">
                <input type="hidden" name="ie" value="UTF-8" />
                <input type="hidden" name="oe" value="UTF-8" />
                <input type="hidden" name="domains" value="" />
                <input type="hidden" name="sitesearch" value="" />
                <input type="text" name="q" maxlength="255" value="" />
                <input type="submit" name="btnG" value="Google Search" />
            </form>
        </td>
    </tr>
</table>

<div id="PageContent">
    <div class="pageheader" style="padding: 6px 0px 0px 0px;">
        <!-- We'll enable this once we figure out how to access (and save) the logo resource -->
        <!--img src="/wiki/images/confluence_logo.gif" style="float: left; margin: 4px 4px 4px 10px;" border="0"-->
        <div style="margin: 0px 10px 0px 10px" class="smalltext">Apache Struts 2 Documentation</div>
        <div style="margin: 0px 10px 8px 10px"  class="pagetitle">Key Changes From WebWork 2</div>

        <div class="greynavbar" align="right" style="padding: 2px 10px; margin: 0px;">
            <a href="https://cwiki.apache.org/confluence/pages/editpage.action?pageId=26950">
                <img src="https://cwiki.apache.org/confluence/images/icons/notep_16.gif"
                     height="16" width="16" border="0" align="absmiddle" title="Edit Page"></a>
            <a href="https://cwiki.apache.org/confluence/pages/editpage.action?pageId=26950">Edit Page</a>
            &nbsp;
            <a href="https://cwiki.apache.org/confluence/pages/listpages.action?key=WW">
                <img src="https://cwiki.apache.org/confluence/images/icons/browse_space.gif"
                     height="16" width="16" border="0" align="absmiddle" title="Browse Space"></a>
            <a href="https://cwiki.apache.org/confluence/pages/listpages.action?key=WW">Browse Space</a>
            &nbsp;
            <a href="https://cwiki.apache.org/confluence/pages/createpage.action?spaceKey=WW&fromPageId=26950">
                <img src="https://cwiki.apache.org/confluence/images/icons/add_page_16.gif"
                     height="16" width="16" border="0" align="absmiddle" title="Add Page"></a>
            <a href="https://cwiki.apache.org/confluence/pages/createpage.action?spaceKey=WW&fromPageId=26950">Add Page</a>
            &nbsp;
            <a href="https://cwiki.apache.org/confluence/pages/createblogpost.action?spaceKey=WW&fromPageId=26950">
                <img src="https://cwiki.apache.org/confluence/images/icons/add_blogentry_16.gif"
                     height="16" width="16" border="0" align="absmiddle" title="Add News"></a>
            <a href="https://cwiki.apache.org/confluence/pages/createblogpost.action?spaceKey=WW&fromPageId=26950">Add News</a>
        </div>
    </div>

    <div class="pagecontent">
        <div class="wiki-content">
            <div id="ConfluenceContent"><p>The upgrade path from WebWork 2 to Struts 2 is smooth glide. Here's the roadmap.</p>

<h3 id="KeyChangesFromWebWork2-SystemPlatform">System Platform</h3>

<ul><li>Struts 2 is dependant on XWork 2 (beta-1).</li><li>Java 1.5 is required to build Struts 2.
	<ul><li>For Java 1.4 deployments, RetroTranslater JARS are available with the distribution.</li></ul>
	</li></ul>


<p>For other changes from WebWork 2, see the "Members to rename", "New property settings", "New features or feature changes", and "Removed or deprecated" sections.</p>

<h4 id="KeyChangesFromWebWork2-Memberstorename">Members to rename </h4>

<div class="table-wrap"><table class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" class="confluenceTh"><p>WebWork 2                  </p></th><th colspan="1" rowspan="1" class="confluenceTh"><p> Struts 2             </p></th></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>com.opensymphony.xwork.*</code>  </p></td><td colspan="1" rowspan="1" class="confluenceTd"><p> <code>com.opensymphony.xwork2.*</code> </p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>com.opensymphony.webwork.*</code> </p></td><td colspan="1" rowspan="1" class="confluenceTd"><p> <code>org.apache.struts2.*</code>  </p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>xwork.xml</code>               </p></td><td colspan="1" rowspan="1" class="confluenceTd"><p> <code>struts.xml</code>        </p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>webwork.properties</code>      </p></td><td colspan="1" rowspan="1" class="confluenceTd"><p> <code>struts.properties</code> </p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>DispatcherUtil              </p></td><td colspan="1" rowspan="1" class="confluenceTd"><p> Dispatcher            </p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>com.opensymphony.webwork.config.Configuration</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>org.apache.struts2.config.Settings</p></td></tr></tbody></table></div>


<p>The tag prefix conventions in the example applications have changed. </p>

<div class="table-wrap"><table class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" class="confluenceTh"><p>JSP        </p></th><td colspan="1" rowspan="1" class="confluenceTd"><p> s: </p></td><td colspan="1" rowspan="1" class="confluenceTd"><p> <em>&lt;s:form ...&gt;</em> </p></td></tr><tr><th colspan="1" rowspan="1" class="confluenceTh"><p>Freemarker </p></th><td colspan="1" rowspan="1" class="confluenceTd"><p> s. </p></td><td colspan="1" rowspan="1" class="confluenceTd"><p> <em>&lt;@s.form ...&gt;</em> </p></td></tr><tr><th colspan="1" rowspan="1" class="confluenceTh"><p>Velocity   </p></th><td colspan="1" rowspan="1" class="confluenceTd"><p> s  </p></td><td colspan="1" rowspan="1" class="confluenceTd"><p> <em>#sform ( ... )</em> </p></td></tr></tbody></table></div>


<h4 id="KeyChangesFromWebWork2-Newpropertysettings">New property settings </h4>

<div class="table-wrap"><table class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" class="confluenceTh"><p>struts.enable.DynamicMethodInvocation </p></th><td colspan="1" rowspan="1" class="confluenceTd"><p> Enable support for the hardwired <code>action!alias</code> syntax (Default is <code>TRUE</code>)</p></td></tr></tbody></table></div>


<div class="confluence-information-macro confluence-information-macro-tip"><span class="aui-icon aui-icon-small aui-iconfont-approve confluence-information-macro-icon"></span><div class="confluence-information-macro-body"><p>It is recommended that all applications specify the DynamicMethodInvocation setting for now, since the default may change. The recommended approach to action aliasing is to use <a shape="rect" href="action-configuration.html">wildcard aliases</a> instead of the hardwired bang.</p></div></div>

<h4 id="KeyChangesFromWebWork2-Newfeaturesandfeaturechanges">New features and feature changes</h4>

<ul><li>Various changes to ConfigurationManager
	<ul><li>ConfigurationManager is no longer a static factory. It is now an instance created through Dispatcher. Custom configuration could be done through DispatcherListener.</li><li>Custom configuration to ConfigurationManager and Configuration cannot be done statically anymore, instead use Dispatcher's DispatcherListener to achieve the same effect.</li></ul>
	</li><li>The <code>prepare</code> interceptor now uses reflection to call prepare_Method_ where <em>method</em> is the action method configured for the particular action in <code>struts.xml</code>.
<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
<pre class="brush: java; gutter: false; theme: Default" style="font-size:12px;">
   &lt;action name="myAction" method="insert" ....&gt;
     .....
   &lt;/action&gt;

   // with the above configuration, and PrepareInterceptor in play, 
   // callsequence will be 
   1] prepareInsert() (If it exists)
   2] prepare() (Unless Interceptor's alwaysInvokePrepare parameter is set to false)
   3] insert()
</pre>
</div></div></li><li>DefaultWorkflowInterceptor (named <code>workflow</code> in <code>struts-default.xml</code>) now uses reflection to call <code>validateMethod</code> on the action class that implements Validateable interface where <code>method</code> is the action method configured for the particular action in <code>struts.xml</code>.
<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
<pre class="brush: java; gutter: false; theme: Default" style="font-size:12px;">
&lt;action name="myAction" method="insert" ...&gt;
       ...
    &lt;/action&gt;

    // with the above configuration, and DefaultWorkflowInterceptor in play, 
    // call sequence for action that implements Validateable interface will be 
    1] validateInsert()
    2] validate() (unless Interceptor's alwaysInvokeValidate parameter is set to false)
    3] insert()
</pre>
</div></div></li><li>The tooltip library used by the xhtml theme was replaced by <a shape="rect" class="external-link" href="http://dojotoolkit.org" rel="nofollow">Dojo's</a> tooltip component.</li><li>Datepicker tag has been renamed to datetimepicker and is now using dojo (limited in terms functionality and internationalization)</li><li><a shape="rect" href="https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=33348">Tiles integration</a> plugin is available.</li><li><a shape="rect" href="action-configuration.html">Wildcards</a> can be specified in action mappings.</li><li><a shape="rect" href="message-store-interceptor.html">MessageStoreInterceptor</a> is introduced to allow field errors / action errors and messages to be store and retrieve through session, resulting them to be preservable across request.</li></ul>


<h4 id="KeyChangesFromWebWork2-Removedordeprecated">Removed or deprecated</h4>

<div class="table-wrap"><table class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" class="confluenceTh"><p>AroundInterceptor</p></th><td colspan="1" rowspan="1" class="confluenceTd"><p> The AroundInterceptor has been removed. If your application extends the AroundInterceptor, either import the class into your source code form WebWork 2 (pursuant to the Open Symphony License) and modify it to server as your own base class, or rewrite your interceptor. </p></td></tr><tr><th colspan="1" rowspan="1" class="confluenceTh"><p><code>oldSyntax</code></p></th><td colspan="1" rowspan="1" class="confluenceTd"><p> Support for the "oldSyntax" is removed. </p></td></tr><tr><th colspan="1" rowspan="1" class="confluenceTh"><p> Rich text editor tag </p></th><td colspan="1" rowspan="1" class="confluenceTd"><p> Rich text editor tag is removed and replaced by Dojo's <a shape="rect" class="external-link" href="http://dojotoolkit.org/docs/rich_text.html" rel="nofollow">rich text editor</a></p></td></tr><tr><th colspan="1" rowspan="1" class="confluenceTh"><p> <code>doActionMethod</code> </p></th><td colspan="1" rowspan="1" class="confluenceTd"><p> The convention of trying a "do" form of an action method is not supported. </p>
<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
<pre class="brush: java; gutter: false; theme: Default" style="font-size:12px;">
  &lt;action name="..." method="submit"&gt;
    ...
  &lt;/action&gt;
</pre>
</div></div>
<p>In WebWork,</p>
<ul><li>try to execute <code>submit</code> method in the action, <em>fail</em></li><li>try to execute <code>doSubmit</code> method in the action if Step 1, <em>fail</em></li><li><em>fail</em><br clear="none">
In Struts,</li><li>try to execute <code>submit</code> method in the action, <em>fail</em></li><li><em>fail</em></li></ul>
</td></tr><tr><td></td></tr><tr><th colspan="1" rowspan="1" class="confluenceTh"><p> <code>default method</code> </p></th><td colspan="1" rowspan="1" class="confluenceTd"><p> Calling the "default" method via "doDefault" is not supported.  </p></td></tr><tr><th colspan="1" rowspan="1" class="confluenceTh"><p> IOC framework </p></th><td colspan="1" rowspan="1" class="confluenceTd"><p> Deprecated in WebWork 2.2, the internal IOC framework is removed in Struts 2. Spring is the <a shape="rect" href="objectfactory.html">ObjectFactory</a> default. </p></td></tr></tbody></table></div></div>
        </div>

        
    </div>
</div>
<div class="footer">
    Generated by CXF SiteExporter
</div>
</body>
</html>
